1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.common.annotations.GwtCompatible;
20
21 import java.io.Serializable;
22
23 import javax.annotation.Nullable;
24
25
26 @GwtCompatible(serializable = true)
27 final class NullsFirstOrdering<T> extends Ordering<T> implements Serializable {
28 final Ordering<? super T> ordering;
29
30 NullsFirstOrdering(Ordering<? super T> ordering) {
31 this.ordering = ordering;
32 }
33
34 @Override public int compare(@Nullable T left, @Nullable T right) {
35 if (left == right) {
36 return 0;
37 }
38 if (left == null) {
39 return RIGHT_IS_GREATER;
40 }
41 if (right == null) {
42 return LEFT_IS_GREATER;
43 }
44 return ordering.compare(left, right);
45 }
46
47 @Override public <S extends T> Ordering<S> reverse() {
48
49 return ordering.reverse().nullsLast();
50 }
51
52 @SuppressWarnings("unchecked")
53 @Override public <S extends T> Ordering<S> nullsFirst() {
54 return (Ordering<S>) this;
55 }
56
57 @Override public <S extends T> Ordering<S> nullsLast() {
58 return ordering.nullsLast();
59 }
60
61 @Override public boolean equals(@Nullable Object object) {
62 if (object == this) {
63 return true;
64 }
65 if (object instanceof NullsFirstOrdering) {
66 NullsFirstOrdering<?> that = (NullsFirstOrdering<?>) object;
67 return this.ordering.equals(that.ordering);
68 }
69 return false;
70 }
71
72 @Override public int hashCode() {
73 return ordering.hashCode() ^ 957692532;
74 }
75
76 @Override public String toString() {
77 return ordering + ".nullsFirst()";
78 }
79
80 private static final long serialVersionUID = 0;
81 }